/**
 * Created by Administrator on 2022/8/27.
 */
/*class Draw {
    public void fun() {
        System.out.println("画画");
    }
}
class Square extends Draw {
    public void fun() {
        System.out.println("正方形");
    }
}
class Circular extends Draw {
    public void fun() {
        System.out.println("圆");
    }
}
public class Test {
    public static void func(Draw draw) {
        draw.fun();
    }
    public static void main(String[] args) {
        // 直接赋值
        // Draw draw = new Square();
        // draw.fun();
        func(new Square());
        func(new Circular());

    }
}*/

/*
//如果使用使用多态, 则不必写这么多的 if - else 分支语句, 代码更简单.
//假设没有多态
class Draw {
    public void fun() {
        System.out.println("画画");
    }
}
class Square {
    public void fun() {
        System.out.println("正方形");
    }
}
class Circular {
    public void fun() {
        System.out.println("圆");
    }
}
public class Test {
    public static void main(String[] args) {
        Square square = new Square();
        Circular circular = new Circular();
        String[] arr = {"square","circular"};
        for (String tmp : arr){
            if (tmp.equals("square")) {
                square.fun();
            } else if(tmp.equals("circular")) {
                circular.fun();
            }
        }
    }
}*/

//避免在构造方法中调用重写的方法
class Draw {
    public Draw() {
        fun();
    }
    public void fun() {
        System.out.println("画画");
    }
}
class Square extends Draw {
    public Square() {
        super();
    }
    int num = 1;
    public void fun() {
        System.out.println("正方形"+num);
    }
}

public class Test {
    public static void main(String[] args) {
        Draw draw = new Square();
    }
}
// 构造 Square 对象的同时, 会调用 Draw 的构造方法.
// Square 的构造方法中调用了 fun 方法, 此时会触发动态绑定, 会调用到 Draw 中的 fun
// 此时 Square 对象自身还没有构造, 此时 num 处在未初始化的状态, 值为 0. 如果具备多态性，num的值应该是1.
// 所以在构造函数内，尽量避免使用实例方法，除了final和private方法。